home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / funpolice / native jGNE.c < prev    next >
C/C++ Source or Header  |  2000-06-23  |  4KB  |  165 lines

  1. #include <SetUpA4.h>
  2. #include <A4Stuff.h>
  3.  
  4. #define OLDROUTINELOCATIONS        0
  5. #define OLDROUTINENAMES            0
  6. #define SystemSevenOrLater        1
  7.  
  8. #ifndef __FONTS__
  9. #    include <Fonts.h>
  10. #endif
  11.  
  12. #ifndef __DIALOGS__
  13. #    include <Dialogs.h>
  14. #endif
  15.  
  16. #ifndef __LOWMEM__
  17. #    include <LowMem.h>
  18. #endif
  19.  
  20. #define    Y_OFFSET    100
  21. #define    X_OFFSET    100
  22.  
  23. static pascal OSErr InitMac (void)
  24. {
  25.     MaxApplZone ( );
  26.     InitGraf (&(qd.thePort));
  27.     InitFonts ( );
  28.     InitWindows ( );
  29.     InitMenus ( );
  30.     TEInit ( );
  31.     InitDialogs (nil);
  32.  
  33.     return noErr;
  34. }
  35. Boolean            inJGNE;
  36. void            *gOldJGNE;
  37. static Boolean     gFilterDone;
  38. Boolean myGNE (EventRecord *event, Boolean result);
  39. pascal asm void myJGNE(void);
  40. static long mytime;
  41. Boolean    finderLoaded=false;
  42.  
  43. PicHandle p;
  44.  
  45. Boolean myGNE (EventRecord *, Boolean result)
  46. {
  47.     OSErr err;
  48.     AEAddressDesc addy;
  49.     AppleEvent evt;
  50.     Str255 s;
  51.     Rect    winRect;
  52.     GrafPtr old;
  53.     ProcessSerialNumber    psn = { 0, 2 };
  54.     WindowPtr w;
  55.  
  56.     if (!finderLoaded)
  57.         {
  58.         if (EqualString(LMGetCurApName(),"\pFinder",true,true))
  59.             finderLoaded = true;
  60.         }
  61.         
  62.     if((TickCount() - mytime > 200) && (finderLoaded)) {
  63.         
  64.  
  65.         mytime = TickCount();
  66.         GetCurrentProcess(&psn);
  67.         /*if( ( EqualString(LMGetCurApName(),"\pBolo 0.99.7",true,true) ) ||
  68.             ( EqualString(LMGetCurApName(),"\pMyth II",true,true) ))
  69.             {
  70.             */
  71.         if( ( !EqualString(LMGetCurApName(),"\pFinder",true,true) ) &&
  72.             ( !EqualString(LMGetCurApName(),"\pCodeWarrior IDE 4.1B4",true,true) ) &&
  73.             ( !EqualString(LMGetCurApName(),"\pExtensions Manager",true,true) ) &&
  74.             ( !EqualString(LMGetCurApName(),"\pChooser",true,true) )
  75.             )
  76.             {
  77.                     winRect = (**p).picFrame;
  78.         OffsetRect(&winRect, -winRect.left + X_OFFSET, -winRect.top + Y_OFFSET);
  79.         GetPort(&old);
  80.         w = NewWindow( nil, & winRect, "\pFun Police", true, altDBoxProc, (WindowPtr)-1L, false, nil);
  81.         SetPort(w);
  82.         DrawPicture(p,&w->portRect);
  83.         while(Button())
  84.             ;
  85.         
  86.         while(!Button())
  87.             ;
  88.         SetPort(old);
  89.         DisposeWindow(w);
  90.         FlushEvents(everyEvent,0);
  91.             
  92.             err = AECreateDesc(typeProcessSerialNumber, &psn, 
  93.                                     sizeof(psn), &addy);
  94.  
  95.             if(err != noErr) {
  96.                 DebugStr("\p err 1");
  97.                 NumToString(err,s);
  98.                 DebugStr(s);
  99.             }    
  100.             err = AECreateAppleEvent (kCoreEventClass, kAEQuitApplication, &addy, kAutoGenerateReturnID,
  101.                                      kAnyTransactionID, &evt);
  102.              
  103.             if(err != noErr) {
  104.                 DebugStr("\p err 2");
  105.                 NumToString(err,s);
  106.                 DebugStr(s);
  107.             }                         
  108.  
  109.             err = AESend (&evt, nil, kAENoReply, kAENormalPriority, kAEDefaultTimeout, nil,  nil);
  110.             
  111.             if(err != noErr) {
  112.                 DebugStr("\p err 3");
  113.                 NumToString(err,s);
  114.                 DebugStr(s);
  115.             }
  116.             //    DebugStr("\pExit");
  117.         }
  118.     }
  119.     return result;
  120. }
  121.  
  122. pascal asm void myJGNE(void){
  123.     //DC.W        0xa9ff
  124.     MOVE.L        D0,A0            // save pre-result from SetUpA4
  125.     JSR            SetCurrentA4    // fix A4, stomp D0
  126.     MOVE.L        D0,-(A7)        // save old A4
  127.     MOVE.L        A0,D0            // restore pre-result
  128.     TST.B        inJGNE            // is myJGNE busy?
  129.     BNE            @1                // yes, so bail
  130.     MOVE.B        #true,inJGNE    // mark myJGNE busy
  131.     MOVE.W        D0,-(A7)        // push pre-result
  132.     MOVE.L        A1,-(A7)        // push event record pointer
  133.     JSR            myGNE            // do the real work/
  134.     MOVE.L        (A7)+,A1        // restore event record pointer
  135.     ADDQ.L        #2,A7            // pop pre-result; post-result in D0
  136.     ASL.W        #8,D0            // bump C boolean to Lisa
  137.     MOVE.W        D0,8(A7)        // stash result where caller expects it
  138.     MOVE.B        #false,inJGNE    // mark myJGNE not busy
  139. @1:
  140.     MOVE.L        gOldJGNE,A0        // get previous jGNE
  141.     MOVE.L        (A7)+,A4        // restore A4
  142.     //cmp.l        #0,a0
  143.     //beq            bail
  144.     MOVE.L        A0,-(A7)        // return to previous jGNE
  145. bail:
  146.     RTS
  147. }
  148.  
  149. void main (void){
  150.     long oldA4 = SetCurrentA4();
  151.     Handle    theInit = 0L;
  152.     p = GetPicture(192);
  153.     DetachResource((Handle)p);
  154.     mytime = TickCount();
  155.     if (((long*)0x174)[1] & 0x02) SysBeep(7)
  156.         ;
  157.       else {
  158.         theInit = Get1Resource('INIT',0); 
  159.         gOldJGNE = LMGetGNEFilter();
  160.         LMSetGNEFilter(myJGNE);
  161.         DetachResource(theInit);
  162.         }
  163.     SetA4(oldA4);
  164. }
  165.